/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package app.controller;

import app.entities.model.DAO.AlunoDAO;
import app.entities.model.DAO.MatriculaAlunoDAO;
import app.entities.model.DAO.TurmaDAO;
import app.entities.model.DAOFactory.DaoFactory;
import app.entities.model.DTO.AlunoDTO;
import app.entities.model.DTO.BimestreDTO;
import app.entities.model.DTO.MatriculaAlunoDTO;
import app.entities.model.DTO.NotasAlunoDTO;
import app.entities.model.DTO.TurmaDTO;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author Murilo
 */
public class ControllerAluno {

    private AlunoDAO AlunoDao;
    private MatriculaAlunoDAO MatriculaAlunoDao;
    private TurmaDAO turmaDao;
    private ArrayList<TurmaDTO> listaTurmas;
    private ArrayList<AlunoDTO> ListaAlunos;
    private ArrayList<MatriculaAlunoDTO> ListaMatriculaAlunos;

    public ControllerAluno() {
        this.AlunoDao = DaoFactory.getAlunoDAO(1);
        this.MatriculaAlunoDao = DaoFactory.getMatriculaAlunoDAO(1);
        this.turmaDao = DaoFactory.getTurmaDAO(1);
    }

    public void matricularAluno(String Nome, String Sobrenome, Date DataNascimento, String CodigoMatricula,
            Date DataMatricula, Boolean isAtiva) {
        int IdAluno = (int) (Math.random() * 1000);
        int IdMatriculaAluno = (int) (Math.random() * 1000);
        this.ListaAlunos = AlunoDao.listar();
        this.ListaMatriculaAlunos = MatriculaAlunoDao.listar();

        for (AlunoDTO aluno : this.ListaAlunos) {
            if (IdAluno == aluno.getId()) {
                IdAluno = (int) (Math.random() * 1000);
            }
        }

        for (MatriculaAlunoDTO matAlu : this.ListaMatriculaAlunos) {
            if (IdMatriculaAluno == matAlu.getId()) {
                IdMatriculaAluno = (int) (Math.random() * 1000);
            }
        }
        AlunoDTO Aluno = new AlunoDTO(IdAluno, Nome, Sobrenome, DataNascimento);
        MatriculaAlunoDTO MatriculaAluno = new MatriculaAlunoDTO(Aluno, IdMatriculaAluno,
                CodigoMatricula, DataMatricula, isAtiva);
        this.AlunoDao.salvar(Aluno);
        this.MatriculaAlunoDao.salvar(MatriculaAluno);
    }

    public ArrayList<MatriculaAlunoDTO> retornarListaAlunosMAtriculados() {
        return this.MatriculaAlunoDao.listar();
    }

    public ArrayList<TurmaDTO> retornarListaTurmasAluno(String codigoMatricula) {
        ArrayList<TurmaDTO> listaTurmaMatriculado = new ArrayList<>();
        this.listaTurmas = this.turmaDao.listar();
        for (TurmaDTO turma : this.listaTurmas) {
            for (MatriculaAlunoDTO matAluno : turma.getAlunos()) {
                if (matAluno.getCodigoMatricula().equals(codigoMatricula)) {
                    listaTurmaMatriculado.add(turma);
                }
            }
        }
        return listaTurmaMatriculado;
    }

    public boolean verificarMatriculaAluno(String CodigoMatricula) {
        if (this.MatriculaAlunoDao.buscarMatriculaAluno(CodigoMatricula) == null) {
            return false;
        } else {
            return true;
        }
    }

    public ArrayList<NotasAlunoDTO> pesquisarNotasAluno(String codigoMatricula, String nomeMateria) {
        this.listaTurmas = this.turmaDao.listar();
        ArrayList<NotasAlunoDTO> listaNotas = new ArrayList<>();
        for(TurmaDTO turma : this.listaTurmas){
            if(turma.getNomeMateria().equals(nomeMateria)){
                for(BimestreDTO bim : turma.getBimestres()){
                    for(NotasAlunoDTO notas : bim.getNotasAlunos()){
                        if(notas.getMatriculaAluno().getCodigoMatricula().equals(codigoMatricula)){
                            listaNotas.add(notas);
                        }
                    }
                }
            }
        }
        return listaNotas;
    }
    
    public float calcularNotaAluno(float nota1, float nota2){
        if(nota2 == 0){
            return (nota1/2);
        }else{
            return ((nota1 + nota2)/2);
        }
    }
}
